﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Elysium.Demo;
using SIIE_ERP.Codigo;
using SIIE_ERP.BaseDatos;
using SIIE_ERP.View;
using System.Data;

namespace Elysium.Demo.PuntoVenta.Transacciones
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class EntradaDinero_Alta : UserControl
    {
        private UsuarioActivo _sesion;

        public EntradaDinero_Alta(ref UsuarioActivo usuario)
        {
            InitializeComponent();
            this._sesion = usuario;
            CargarCatalogos();
            CargarDatos();
        }

        private void ButtonInformacion_Click_1(object sender, RoutedEventArgs e)
        {
            WindowAyuda Ayuda = new Elysium.Demo.WindowAyuda("EntradaDinero.htm", "Ayuda");
            Ayuda.Owner = SIIE_ERP.View.NavegacionUI.GetParentWindow(this); Ayuda.ShowDialog();
        }

        private void CargarDatos()
        {
            // Obtener datos de inicial y actual
            var db = new SIIE_ERP.BaseDatos.PuntoVenta.Catalogos.dbo_Cat_Terminal(_sesion.RFC, _sesion.UserName);
            var terminal = db.Get_Terminal_Abierta() as DataRow;

            if (terminal != null)
            {
                CampoImporteApertura.Text = terminal["Importe"].ToString();
                CampoDineroActualCaja.Text = terminal["Saldo"].ToString();
            }
            else
            {
                MessageBox.Show("Something went wrong :(");
            }

        }

        private void CargarCatalogos()
        {
            ComboBoxUI.ComboCuentasBancarias(ComboCuentaImporte, _sesion);
        }

        // Registrar la entrada de dinero
        private void Button_Guardar_Click(object sender, RoutedEventArgs e)
        {
            if (!Valida()) return;
            // Actualizar los saldos de las cuentas bancarias
            // Sacamos dinero de la cuenta seleccionada

            var Monto = Double.Parse(CampoImporteEntrada.Text);
            var CuentaBancaria = ComboCuentaImporte.SelectedValue.ToString();
            var CuentaTerminal = new SIIE_ERP.BaseDatos.PuntoVenta.Catalogos.dbo_Cat_Terminal(_sesion.RFC, _sesion.UserName)
                                                    .Get_Terminal_Por_Id(_sesion.PV_Id_Terminal).Rows[0]["Id_CuentaBancaria"].ToString();
            
            var db = new SIIE_ERP.BaseDatos.Bancos.Catalogos.dbo_Cat_Cuenta_Bancaria(_sesion.RFC, _sesion.UserName);

            db.Update_Saldo_Cuenta_Bancaria_Por_Id(Int32.Parse(CuentaBancaria), Monto * (-1)); // Retiramos el dinero
            db.Update_Saldo_Cuenta_Bancaria_Por_Id(Int32.Parse(CuentaTerminal), Monto); // Aumentamos el dinero a la terminal

            // Registrar el movimiento de de dinero

            var pv = new SIIE_ERP.BaseDatos.PuntoVenta.Transacciones.dbo_Trans_MovimientoDineroCaja(_sesion.RFC, _sesion.UserName);
            var terminalAbierta = new SIIE_ERP.BaseDatos.PuntoVenta.Catalogos.dbo_Cat_Terminal(_sesion.RFC, _sesion.UserName).Get_Terminal_Abierta();
            pv.Insert_Trans_MovimientoDineroCaja(terminalAbierta["Id_Apertura"].ToString(), _sesion.PV_Id_Terminal.ToString(),
                                                 ComboCuentaImporte.SelectedValue.ToString(), null, CampoImporteEntrada.Text, "+");

            // Registra el movimiento en conciliacion
            var Pesos = new SIIE_ERP.BaseDatos.Bancos.Catalogos.dbo_Cat_Moneda(_sesion.RFC, _sesion.UserName).Get_Moneda_Por_Nombre("Pesos Mexicanos").Rows[0]["Id_Moneda"].ToString();

            var conciliacion = new SIIE_ERP.BaseDatos.Bancos.dbo_Trans_Conciliacion(_sesion.RFC, _sesion.UserName);
            conciliacion.Insert_Transaccion_Bancaria(CuentaBancaria,
                                                     CuentaTerminal,
                                                     "0",
                                                     Pesos,
                                                     Monto.ToString(),
                                                     "Entrada de dinero a caja.");

            // Listo! :D
            MessageBox.Show("Entrada de dinero procesada correctamente.");
            CampoImporteEntrada.Text = "";
            CargarDatos();
        }

        private bool Valida()
        {
            try { Double.Parse(CampoImporteEntrada.Text); }
            catch (Exception)
            {
                MessageBox.Show("El importe a ingresar debe ser numerico"); return false;
            }

            if (ComboCuentaImporte.SelectedValue == null)
            {
                MessageBox.Show("Debe seleccionar una cuenta bancaria"); return false;
            }
            return true;
        }

        private void ButtonRegresar_Click(object sender, RoutedEventArgs e)
        {
            (this.Parent as ScrollViewer).Content = null;
        }

    }
}
